S000424 TurboCapture-Seq compare lysis buffers

Recap

Checked 16 well barcoded second strand primers. Mapping rates and background looks good. With a view to future time course experiments with suspension cells, check the compatibility of various lysis buffers.

Aim

Test a variety of lysis buffers for compatibility with TurboCaptureSeq

Samples

  1. Rep 1 (columns 1 and 2)
  2. Rep 2 (columns 4 and 5)
  3. Rep 3 (columns 7 and 8)
  4. Rep 4 (columns 10 and 11)

Lab notes

SUPERase-In RNase inhibitor was used instead of RNaseOUT.

After reverse transcription, washed twice with 180 µL of 10 mM Tris before removing all remaining liquid.

Piper only used 8 well barcoded primers instead of the intended 16, so instead of pairs of columns as a replicate for a total of 4 replicates, now have individual columns as replicates for a total of 8 replicates:

  1. Rep 1 = Column 1 = Rep1A
  2. Rep 2 = Column 2 = Rep1B
  3. Rep 3 = Column 4 = Rep2A
  4. Rep 4 = Column 5 = Rep2B
  5. Rep 5 = Column 7 = Rep3A
  6. Rep 6 = Column 8 = Rep3B
  7. Rep 7 = Column 10 = Rep4A
  8. Rep 8 = Column 11 = Rep4B

Stopped after 0.8x SPRI cleanup and eluted in 20 µL.

Following PCR 2, performed the 2 sided selection.

Performed dsDNA HS Qubit for both PCR1 and PCR2 samples using 2 ÎĽL of sample as per standard protocol.

Replicates 2, 3, 5, 6, 7, 8 were diluted to be between1 - 5 ng/ÎĽL for the D5000 Tape.

Notebook recap

SCE object in generate in 1A_generateSCE_reads notebook.

Notebook aim

Plot the QC metrics.

Read SCE and extract col data

This is the SCE object from single end umi

sce <- readRDS(here::here(
   "data/TIRE_technical/SCEs/lysis_buffer.sce.rds"))

tb <- as_tibble(colData(sce))

Check on plate map representation

Plot on plate map

Samples

p1 <- platetools::raw_map(data=tb$Sample, 
                     well=tb$Well, 
                     plate=96)

p2 <- platetools::raw_map(data=log(tb$sum+1), 
                     well=tb$Well, 
                     plate=96)

p1 / p2

Lysis buffer

p1 <- platetools::raw_map(data=tb$Buffer, 
                     well=tb$Well, 
                     plate=96)

p2 <- platetools::raw_map(data=log(tb$sum+1), 
                     well=tb$Well, 
                     plate=96)

p1 / p2

Dot plots by lysis buffer

Something went wrong with replicate 2B but otherwise looks reasonable. Not much difference between

  • 1x TCL = cells washed in PBS and pellet resuspended in lysis buffer
  • 2x TCL = cells in media where 2 x TCL is added in equal vol to cells
  • DRS = DNA RNA shield didn’t really work

Library size log

plt1 <- ggplot(tb,
             aes(x = Buffer, y= sum, colour = Sample)) + 
  geom_point() + 
  ylab("Library Size (UMIs)") + 
  xlab("Lysis buffer") +
  scale_y_continuous(trans='log10') +
  annotation_logticks(base = 10, sides = "l") +
  scale_colour_Publication()

plt1
Library size in deduplicated UMIs

Library size in deduplicated UMIs

Library size natural scale

plt2 <- ggplot(tb,
             aes(x = Buffer, y= sum, colour = Sample, label = Replicate)) + 
  geom_text() + 
  ylab("Library Size (UMIs)") + 
  xlab("Lysis buffer") +  
  scale_fill_brewer(palette = "Dark2")

plt2
Library size in deduplicated UMIs

Library size in deduplicated UMIs

Detected genes

plt3 <- ggplot(tb,
             aes(x = Buffer, y= detected, colour = Sample, label=Replicate)) + 
  geom_text() + 
  ylab("Genes detected") + 
  xlab("Lysis buffer") +
  scale_fill_brewer(palette = "Dark2")

plt3
Number of detected genes

Number of detected genes

Genes v UMIs

plt4 <- ggplot(tb, 
             aes(x = detected+1, y= sum+1, colour = Buffer, label=Replicate)) + 
  geom_text() + 
  ylab("Library size (UMIs)") + 
  xlab("Genes detected") +
  scale_y_continuous(trans='log10') + scale_x_continuous(trans='log10') +
  annotation_logticks(base = 10, sides = "bl") +
  scale_colour_brewer(palette = "Dark2")

plt4
UMIs versus genes

UMIs versus genes

Check UMIs are not saturated

I ordered an inital 10nt UMI sequence in the TSO, 1,048,576 molecules. Check this is not saturated.

human <- scater::plotHighestExprs(altExp(sce, "Human"), n=10, colour_cells_by = "Sample") + theme_Publication()

human

counts(altExp(sce, "Human"))["MT-RNR2",]
## AATGTATCAAAGTGTGTG AATGTATCCAGAGTCCTT AATGTATCCATTTGCGAT AATGTATCCCACGTCTAC 
##                321              61516                329              34676 
## AATGTATCGAGTTATGTG AATGTATCGCAACGACTC AATGTATCGCATTGATCT AATGTATCTGCACAGAGA 
##              19521               1098                541              38545 
## CCGGCAACAAAGTGTGTG CCGGCAACCAGAGTCCTT CCGGCAACCATTTGCGAT CCGGCAACCCACGTCTAC 
##                509              52897                184              31047 
## CCGGCAACGAGTTATGTG CCGGCAACGCAACGACTC CCGGCAACGCATTGATCT CCGGCAACTGCACAGAGA 
##              18829               1716                729              33804 
## CGGCTGGAAAAGTGTGTG CGGCTGGACAGAGTCCTT CGGCTGGACATTTGCGAT CGGCTGGACCACGTCTAC 
##                 45              28054                 59               9244 
## CGGCTGGAGAGTTATGTG CGGCTGGAGCAACGACTC CGGCTGGAGCATTGATCT CGGCTGGATGCACAGAGA 
##               6742                176                143              11567 
## CTCCTTTAGAGTTATGTG CTCCTTTATGCACAGAGA GAGACGCAAAAGTGTGTG GAGACGCACAGAGTCCTT 
##                  0                  0                166              46230 
## GAGACGCACATTTGCGAT GAGACGCACCACGTCTAC GAGACGCAGAGTTATGTG GAGACGCAGCAACGACTC 
##                193              33026              20440               1067 
## GAGACGCAGCATTGATCT GAGACGCATGCACAGAGA GTCCCATCAAAGTGTGTG GTCCCATCCAGAGTCCTT 
##                559              33313                198              53498 
## GTCCCATCCATTTGCGAT GTCCCATCCCACGTCTAC GTCCCATCGAGTTATGTG GTCCCATCGCAACGACTC 
##                198              34929              18678               1115 
## GTCCCATCGCATTGATCT GTCCCATCTGCACAGAGA TTCACACCAAAGTGTGTG TTCACACCCAGAGTCCTT 
##                551              29867                 43              21667 
## TTCACACCCATTTGCGAT TTCACACCCCACGTCTAC TTCACACCGAGTTATGTG TTCACACCGCAACGACTC 
##                 66              11774               5074                  5 
## TTCACACCGCATTGATCT TTCACACCTGCACAGAGA TTGCCCGTAAAGTGTGTG TTGCCCGTCAGAGTCCTT 
##                157              12597                245              64226 
## TTGCCCGTCATTTGCGAT TTGCCCGTCCACGTCTAC TTGCCCGTGAGTTATGTG TTGCCCGTGCAACGACTC 
##                298              35281              17522                988 
## TTGCCCGTGCATTGATCT TTGCCCGTTGCACAGAGA 
##                779              43029

I am far from saturated sequencing here I think. Top count for MT-RNR2 is 64,226

Barnyard plots

Some molecular swapping but much cleaner than minibulk

Natural scale

plt5 <- ggplot(data=tb, aes(y=subsets_Human_sum, x=subsets_Mouse_sum, colour=Sample)) +
  geom_point() +
  scale_colour_brewer(type="qualitative", palette = "Dark2") +
  xlab("Mouse counts") + ylab("Human Counts")

plt5

Natural scale well label

plt5 <- ggplot(data=tb, aes(y=subsets_Human_sum, x=subsets_Mouse_sum, colour=Sample, label=Buffer)) +
  geom_text() +
  scale_colour_brewer(type="qualitative", palette = "Dark2") +
  xlab("Mouse counts") + ylab("Human Counts")

plt5

Log scale

plt6 <- ggplot(data=tb, aes(y=subsets_Human_sum+1, x=subsets_Mouse_sum+1, shape=Sample, colour=Buffer)) +
  geom_point() +
  scale_colour_brewer(type="qualitative", palette = "Dark2") +
  xlab("Mouse counts") + ylab("Human Counts") +
  scale_x_continuous(trans='log10') + scale_y_continuous(trans='log10') +
  annotation_logticks(base = 10, sides = "bl")

plt6

Conclusion

2x DNA / RNA shield doesn’t work very well, probably salt concentration. Same for Qiagen buffer RLT

  • 1x TCL = cells pelleted and washed once in PBS -> pellet resuspended in 1x TC lysis buffer
  • RLT= cells pelleted and washed once in PBS -> pellet resuspended in Qiagen RLT buffer
  • 2x TCL = cells in media lysed in equal volume 2x TCL buffer
  • DRS = cells in media lysed in equal volume 2x DNA / RNA shield

Session info

sessionInfo()
## R version 4.4.1 (2024-06-14)
## Platform: x86_64-pc-linux-gnu
## Running under: Red Hat Enterprise Linux 9.4 (Plow)
## 
## Matrix products: default
## BLAS:   /stornext/System/data/software/rhel/9/base/tools/R/4.4.1/lib64/R/lib/libRblas.so 
## LAPACK: /stornext/System/data/software/rhel/9/base/tools/R/4.4.1/lib64/R/lib/libRlapack.so;  LAPACK version 3.12.0
## 
## locale:
##  [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
##  [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
##  [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
##  [7] LC_PAPER=en_US.UTF-8       LC_NAME=C                 
##  [9] LC_ADDRESS=C               LC_TELEPHONE=C            
## [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       
## 
## time zone: Australia/Melbourne
## tzcode source: system (glibc)
## 
## attached base packages:
## [1] grid      stats4    stats     graphics  grDevices utils     datasets 
## [8] methods   base     
## 
## other attached packages:
##  [1] scales_1.3.0                ggthemes_5.1.0             
##  [3] here_1.0.1                  patchwork_1.3.0            
##  [5] platetools_0.1.7            scater_1.32.1              
##  [7] scuttle_1.14.0              lubridate_1.9.3            
##  [9] forcats_1.0.0               stringr_1.5.1              
## [11] dplyr_1.1.4                 purrr_1.0.2                
## [13] readr_2.1.5                 tidyr_1.3.1                
## [15] tibble_3.2.1                ggplot2_3.5.1              
## [17] tidyverse_2.0.0             SingleCellExperiment_1.26.0
## [19] SummarizedExperiment_1.34.0 Biobase_2.64.0             
## [21] GenomicRanges_1.56.2        GenomeInfoDb_1.40.1        
## [23] IRanges_2.38.1              S4Vectors_0.42.1           
## [25] BiocGenerics_0.50.0         MatrixGenerics_1.16.0      
## [27] matrixStats_1.4.1          
## 
## loaded via a namespace (and not attached):
##  [1] tidyselect_1.2.1          viridisLite_0.4.2        
##  [3] farver_2.1.2              vipor_0.4.7              
##  [5] viridis_0.6.5             fastmap_1.2.0            
##  [7] digest_0.6.37             rsvd_1.0.5               
##  [9] timechange_0.3.0          lifecycle_1.0.4          
## [11] magrittr_2.0.3            compiler_4.4.1           
## [13] rlang_1.1.4               sass_0.4.9               
## [15] tools_4.4.1               utf8_1.2.4               
## [17] yaml_2.3.10               knitr_1.48               
## [19] labeling_0.4.3            S4Arrays_1.4.1           
## [21] DelayedArray_0.30.1       RColorBrewer_1.1-3       
## [23] abind_1.4-8               BiocParallel_1.38.0      
## [25] withr_3.0.1               fansi_1.0.6              
## [27] beachmat_2.20.0           colorspace_2.1-1         
## [29] cli_3.6.3                 rmarkdown_2.28           
## [31] crayon_1.5.3              generics_0.1.3           
## [33] rstudioapi_0.17.0         httr_1.4.7               
## [35] tzdb_0.4.0                DelayedMatrixStats_1.26.0
## [37] ggbeeswarm_0.7.2          cachem_1.1.0             
## [39] zlibbioc_1.50.0           parallel_4.4.1           
## [41] XVector_0.44.0            vctrs_0.6.5              
## [43] Matrix_1.7-0              jsonlite_1.8.9           
## [45] BiocSingular_1.20.0       hms_1.1.3                
## [47] BiocNeighbors_1.22.0      ggrepel_0.9.6            
## [49] irlba_2.3.5.1             beeswarm_0.4.0           
## [51] jquerylib_0.1.4           glue_1.8.0               
## [53] codetools_0.2-20          stringi_1.8.4            
## [55] gtable_0.3.5              UCSC.utils_1.0.0         
## [57] ScaledMatrix_1.12.0       munsell_0.5.1            
## [59] pillar_1.9.0              htmltools_0.5.8.1        
## [61] GenomeInfoDbData_1.2.12   R6_2.5.1                 
## [63] sparseMatrixStats_1.16.0  rprojroot_2.0.4          
## [65] evaluate_1.0.1            lattice_0.22-6           
## [67] highr_0.11                bslib_0.8.0              
## [69] Rcpp_1.0.13               gridExtra_2.3            
## [71] SparseArray_1.4.8         xfun_0.48                
## [73] pkgconfig_2.0.3